﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using turnos.core.util;
using turnos.core.modelo;

namespace turnos.escritorio
{
    public partial class frmAtencionTurnos : Form
    {
        private List<AgendaDeTurnos> Agendas;

        private AgendaDeTurnos _agenda;

        public AgendaDeTurnos AgendaSeleccionada
        {
            get { return _agenda; }
            set { _agenda = value; }
        }
        public frmAtencionTurnos()
        {
            InitializeComponent();
        }


        private List<DataGridViewColumn> columnas_agenda()
        {
            List<DataGridViewColumn> retorno = new List<DataGridViewColumn>();

            DataGridViewColumn c = new DataGridViewTextBoxColumn();
            c.Name = "Identificacion";
            c.DataPropertyName = "IdTurno";
            c.Visible = false;
            retorno.Add(c);

            DataGridViewColumn c1 = new DataGridViewTextBoxColumn();
            c1.Name = "Fecha";
            c1.DataPropertyName = "Fecha";

            retorno.Add(c1);

            DataGridViewColumn c2 = new DataGridViewTextBoxColumn();
            c2.Name = "Hora Inicio";
            c2.DataPropertyName = "FechayHora";
            c2.DefaultCellStyle.Format = "hh:mm";

            retorno.Add(c2);

            DataGridViewColumn c3 = new DataGridViewTextBoxColumn();
            c3.Name = "Solicitante";
            c3.Width = 400;
            c3.DataPropertyName = "SolicitanteDescripcion";

            retorno.Add(c3);

            DataGridViewColumn c4 = new DataGridViewTextBoxColumn();
            c4.Name = "Estado";
            c4.DataPropertyName = "EstadoDescripcion";

            retorno.Add(c4);

            return retorno;
        }



        private void cargarGrilla()
        {
            try
            {
                Agendas = Modelo.TurnosModelo.TurnosC.TraerAgendaPorFecha(dtpFecha.Value, turnosCts.ID_ESTADO_A_ATENDER, byte.Parse(Modelo.TurnosModelo.Usuario.Puesto.Replace("Puesto","")));
                dgvAgenda.DataSource = Agendas;

                /*if (agenda.Count == 0)
                    throw new turnosException(turnosCts.NO_SE_GENERO_LA_AGENDA);*/

                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }


        private void frmAtencionTurnos_Load(object sender, EventArgs e)
        {
            try
            {
                lblPuesto.Text = "Empleado: " + Modelo.TurnosModelo.Usuario.Usuario + " " + Modelo.TurnosModelo.Usuario.Puesto;
                Modelo.TurnosModelo.ConfigurarDGV(dgvAgenda, columnas_agenda());

                dtpFecha.Value = DateTime.Now;
                cargarGrilla();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }

        }
        /*
        private void dgvAgenda_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                seleccionaAgenda();
                if (AgendaSeleccionada.RefEstado != turnosCts.ID_ESTADO_LIBRE)
                    throw new turnosException("No esta libre el turno");
                //Abrir Carga de Solicitante
                frmAMSolicitante frmSol = new frmAMSolicitante();
                frmSol.AgendaSeleccionada = AgendaSeleccionada;
                frmSol.ShowDialog();
                cargarGrilla();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }

        }

        private void seleccionaAgenda()
        {
            int idTurno = int.Parse(dgvAgenda.CurrentRow.Cells[0].Value.ToString());
            AgendaSeleccionada = Modelo.TurnosModelo.TurnosC.TraerAgendaPorId(idTurno);
        }
        */

        private void btnProximo_Click(object sender, EventArgs e)
        {
            cargarGrilla();
            bool ok = false; int i = 0;

            while ((i < dgvAgenda.Rows.Count) && !(ok))
            {
                int idTurno = int.Parse(dgvAgenda.Rows[i].Cells[0].Value.ToString());
                AgendaSeleccionada = Modelo.TurnosModelo.TurnosC.TraerAgendaPorId(idTurno);
                if (AgendaSeleccionada.RefEstado == turnosCts.ID_ESTADO_A_ATENDER)
                    ok = true;
                i++;
            }
            if (ok)
            {
                AgendaSeleccionada.RefEstado = turnosCts.ID_ESTADO_LLAMAR;
                Modelo.TurnosModelo.TurnosC.ActualizarAgenda(AgendaSeleccionada, Modelo.TurnosModelo.Usuario.Usuario);

                frmTurno frmTur = new frmTurno();
                frmTur.AgendaSeleccionada = AgendaSeleccionada;
                //frmTur.PuestoSeleccionado = byte.Parse(Modelo.TurnosModelo.Usuario.Puesto.Replace("Puesto", ""));
                frmTur.ShowDialog();
            }
            else
                MessageBox.Show("No se encontraron turnos libres");
        }

        private void dtpFecha_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                cargarGrilla();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }

        }

        private void dgvAgenda_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (dgvAgenda.CurrentRow.Index == 0)
                {
                    int idTurno = int.Parse(dgvAgenda.CurrentRow.Cells[0].Value.ToString());
                    AgendaSeleccionada = Modelo.TurnosModelo.TurnosC.TraerAgendaPorId(idTurno);
                    if (AgendaSeleccionada.RefEstado != turnosCts.ID_ESTADO_A_ATENDER && AgendaSeleccionada.RefEstado != turnosCts.ID_ESTADO_AUSENTE)
                        throw new turnosException("No esta pendiente el turno");

                    AgendaSeleccionada.RefEstado = turnosCts.ID_ESTADO_LLAMAR;
                    Modelo.TurnosModelo.TurnosC.ActualizarAgenda(AgendaSeleccionada, Modelo.TurnosModelo.Usuario.Usuario);
                    
                    frmTurno frmTur = new frmTurno();
                    frmTur.AgendaSeleccionada = AgendaSeleccionada;
                    //frmTur.PuestoSeleccionado = byte.Parse(Modelo.TurnosModelo.Usuario.Puesto.Replace("Puesto", ""));
                    frmTur.ShowDialog();
                    /*if (frmTur.AgendaSeleccionada.RefEstado == turnosCts.ID_ESTADO_LLAMAR)
                    {
                        frmTur.AgendaSeleccionada.RefEstado = turnosCts.ID_ESTADO_A_ATENDER;
                        Modelo.TurnosModelo.TurnosC.ActualizarAgenda(frmTur.AgendaSeleccionada, Modelo.TurnosModelo.Usuario.Usuario);
                    }*/
                    cargarGrilla();
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                cargarGrilla();
                if (Agendas != null && Agendas.Count == 0)
                    throw new turnosException(turnosCts.NO_SE_GENERO_LA_AGENDA);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }

        private void dgvAgenda_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }
}
